//config的设置是全局的
layui.config({
    base: '/js/plugins/' // 自定义扩展插件所在的目录
}).extend({ //设定模块别名
    yjslayer: 'yjslayer',
    yjsloading: 'yjsloading',
});

layui.use(['yjslayer', 'yjsloading', 'table'], function () {
    var $ = layui.jquery
        , yjslayer = layui.yjslayer
        , yjsloading = layui.yjsloading
        , table = layui.table;

    // 获取csrf-token
    $.ajaxSetup({
        headers: {
            'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
        }
    });

    // 数据表格方法级渲染
    var tbObj = table.render({
        elem: '#dataBody' // 绑定元素
        , id: 'departmentList' // 唯一ID
        , height: 'full-20' //高度最大化减去差值
        , url: '/departments/index' // 接口地址 默认会自动传递两个参数：?page=1&limit=30
        , method: 'post' // 接口请求方法
        , page: true
        , skin: 'row' //行边框风格
        , even: true //开启隔行背景
        , limits: [10, 30, 60, 90, 150]
        , limit: 10 //默认采用30
        , cols: [[
            {checkbox: true, fixed: true}
            , {field: 'code', title: '部门代码', width: 100, sort: true, fixed: true}
            , {
                field: 'show_level',
                title: '<i class="layui-icon">&#xe605;</i>优先级',
                width: 110,
                sort: true,
                edit: 'text'
            }
            , {field: 'name', title: '<i class="layui-icon">&#xe605;</i>部门名称', width: 110, edit: 'text'}
            , {
                field: 'parent_code',
                title: '<i class="layui-icon">&#xe605;</i>所属部门',
                width: 110,
                event: 'setParent',
                style: 'cursor: pointer;'
            }
            , {field: 'telephone', title: '<i class="layui-icon">&#xe605;</i>联系电话', width: 120, edit: 'text'}
            , {field: 'principal', title: '<i class="layui-icon">&#xe605;</i>负责人', width: 120, edit: 'text'}
            , {field: 'updated_at', title: '修改时间', sort: true, width: 120}
            , {field: 'created_at', title: '创建时间', sort: true, width: 120}
            , {title: '操作', width: 150, fixed: 'right', align: 'center', toolbar: '#groupBtn'}
        ]]
        , done: function (res, curr, count) {
            //如果是异步请求数据方式，res即为你接口返回的信息。
            //如果是直接赋值的方式，res即为：{data: [], count: 99} data为当前页数据、count为数据总长度
        }
    });

    // 事件处理
    var eventHandle = {
        // 模板导入
        importDepartment: function (obj) {
            var importUrl = '/departments/import?view=' + obj;
            layer.open({
                type: 2
                , id: 'department'+obj // 只允许弹出一个
                , title: '导入部门'
                , area: ['500px', '400px']
                , shade: 0
                , maxmin: true
                , content: importUrl
                , btn: ['确认', '取消']
                , zIndex: layer.zIndex // 当前窗体层叠顺序(layui自动维护)
                , success: function (layero, index) { // 弹出成功回调
                    // 置顶当前窗体
                    layer.setTop(layero);
                }
                , yes: function (index, layero) { // 确定按钮回调
                    // 获取当前索引iframe页<form>元素对象
                    var form = layer.getChildFrame('[name="excelForm"]', index);
                    // 获取当前form下隐藏submit按钮对象
                    var btnHidden = form.find('#toolbarSubmit')[0];
                    // 向服务端post新增数据
                    btnHidden.click();
                }
                , btn2: function (index, layero) { // 取消按钮回调
                    $title = '导入部门';
                    $msg = '您确定取消本次数据导入操作吗？';
                    yjsloading.popupCancelConfirm($title, $msg, index);
                    return false;
                }
                , cancel: function (index, layero) { // 关闭窗体成功回调
                    $title = '新增部门';
                    $msg = '您确定取消本次数据导入操作吗？';
                    yjsloading.popupCancelConfirm($title, $msg, index);
                    return false;
                }
                , end: function () {
                    // 表格刷新
                    tbObj.reload();
                }
            });
        },
        // 模板导出
        exportDepartment: function (obj) { 
            $title = '部门数据导出';
            $msg = '您确定执行本次数据导出操作吗？';
            $url = '/export/departments';
            yjsloading.exportConfirm($title, $msg, $url);
        },
        // 关键字搜索重载
        searchData: function (obj) {
            // 获取关键字
            var words = $('#searchReload').val();

            // 表格搜索、重载
            tbObj.reload({
                where: {keywords: words}
            });
        },
        // 删除（批量）
        deleteBatchData: function (obj) {
            var checkStatus = table.checkStatus('departmentList')
                ,data = checkStatus.data;
            if (checkStatus.data.length===0)
            {
                yjslayer.failMsg('请选择需删除的部门数据！');
            } else {
                var ids = [];
                for(var i=0;i<data.length;i++){
                    ids[i] = data[i].code;
                }
                // layer.alert(JSON.stringify(ids));
                var idsStr = ids.join(",");
                var deleteBatchUrl = '/departments/operate?view=' + obj +'&code='+idsStr;
                layer.open({
                    type: 2
                    , id: obj // 只允许弹出一个
                    , title: '批量删除部门'
                    , area: ['500px', '400px']
                    , shade: 0
                    , maxmin: true
                    , content: deleteBatchUrl
                    , btn: ['确认', '取消']
                    , zIndex: layer.zIndex // 当前窗体层叠顺序(layui自动维护)
                    , success: function (layero, index) { // 弹出成功回调
                        // 置顶当前窗体
                        layer.setTop(layero);
                    }
                    , yes: function (index, layero) { // 确定按钮回调
                        // 获取当前索引iframe页<form>元素对象
                        var form = layer.getChildFrame('[name="departmentForm"]', index);
                        // 获取当前form下隐藏submit按钮对象
                        var btnHidden = form.find('#toolbarSubmit')[0];
                        // 向服务端post新增数据
                        btnHidden.click();
                    }
                    , btn2: function (index, layero) { // 取消按钮回调
                        $title = '删除部门';
                        $msg = '您确定取消本次数据批量删除操作吗？';
                        yjsloading.popupCancelConfirm($title, $msg, index);
                        return false;
                    }
                    , cancel: function (index, layero) { // 关闭窗体成功回调
                        $title = '删除部门';
                        $msg = '您确定取消本次数据批量删除操作吗？';
                        yjsloading.popupCancelConfirm($title, $msg, index);
                        return false;
                    }
                    , end: function () {
                        // 表格刷新
                        tbObj.reload();
                    }
                });
            }
        },
        // 查看（单条）
        viewData: function (obj) {
            var viewUrl = '/departments/item?view=' + obj.event +'&code='+obj.data.code;
            layer.open({
                type: 2
                , id: obj.event+obj.data.code // 只允许弹出一个
                , title: '查看部门信息'
                , area: ['500px', '400px']
                , shade: 0
                , maxmin: true
                , content: viewUrl
                , btn: ['确认', '取消']
                , zIndex: layer.zIndex // 当前窗体层叠顺序(layui自动维护)
                , success: function (layero, index) { // 弹出成功回调
                    // 置顶当前窗体
                    layer.setTop(layero);
                }
                , yes: function (index, layero) { // 确定按钮回调
                    layer.close(index);
                }
                , btn2: function (index, layero) { // 取消按钮回调
                    layer.close(index);
                }
                , cancel: function (index, layero) { // 关闭窗体成功回调
                    layer.close(index);
                }
            });
        },
        // 删除（单条）
        deleteData: function (obj) {
            var deleteUrl = '/departments/operate?view=' + obj.event +'&code='+obj.data.code;
            layer.open({
                type: 2
                , id: obj.event+obj.data.code // 只允许弹出一个
                , title: '删除部门'
                , area: ['500px', '400px']
                , shade: 0
                , maxmin: true
                , content: deleteUrl
                , btn: ['确认', '取消']
                , zIndex: layer.zIndex // 当前窗体层叠顺序(layui自动维护)
                , success: function (layero, index) { // 弹出成功回调
                    // 置顶当前窗体
                    layer.setTop(layero);
                }
                , yes: function (index, layero) { // 确定按钮回调
                    // 获取当前索引iframe页<form>元素对象
                    var form = layer.getChildFrame('[name="departmentForm"]', index);
                    // 获取当前form下隐藏submit按钮对象
                    var btnHidden = form.find('#toolbarSubmit')[0];
                    // 向服务端post新增数据
                    btnHidden.click();
                }
                , btn2: function (index, layero) { // 取消按钮回调
                    $title = '删除部门';
                    $msg = '您确定取消本次数据删除操作吗？';
                    yjsloading.popupCancelConfirm($title, $msg, index);
                    return false;
                }
                , cancel: function (index, layero) { // 关闭窗体成功回调
                    $title = '删除部门';
                    $msg = '您确定取消本次数据删除操作吗？';
                    yjsloading.popupCancelConfirm($title, $msg, index);
                    return false;
                }
                , end: function () {
                    // 表格刷新
                    tbObj.reload();
                }
            });
        },
        // 更改所属部门
        setParent: function (obj) {
            var editUrl = '/departments/item?view=' + obj.event +'&code='+obj.data.code;
            layer.open({
                type: 2
                , id: obj.event+obj.data.code // 只允许弹出一个
                , title: '编辑部门'
                , area: ['500px', '400px']
                , shade: 0
                , maxmin: true
                , content: editUrl
                , btn: ['确认', '取消']
                , zIndex: layer.zIndex // 当前窗体层叠顺序(layui自动维护)
                , success: function (layero, index) { // 弹出成功回调
                    // 置顶当前窗体
                    layer.setTop(layero);
                }
                , yes: function (index, layero) { // 确定按钮回调
                    // 获取当前索引iframe页<form>元素对象
                    var form = layer.getChildFrame('[name="departmentForm"]', index);
                    // 获取当前form下隐藏submit按钮对象
                    var btnHidden = form.find('#toolbarSubmit')[0];
                    // 向服务端post新增数据
                    btnHidden.click();
                }
                , btn2: function (index, layero) { // 取消按钮回调
                    $title = '新增部门';
                    $msg = '您确定取消本次数据编辑操作吗？';
                    yjsloading.popupCancelConfirm($title, $msg, index);
                    return false;
                }
                , cancel: function (index, layero) { // 关闭窗体成功回调
                    $title = '新增部门';
                    $msg = '您确定取消本次数据编辑操作吗？';
                    yjsloading.popupCancelConfirm($title, $msg, index);
                    return false;
                }
                , end: function () {
                    // 表格刷新
                    tbObj.reload();
                }
            });
        }
    };

    // 监听按钮点击事件 (非工具条)
    $('.layui-btn').on('click', function () {
        var type = $(this).data('type');
        eventHandle[type] ? eventHandle[type].call(this, type) : '';
    });

    // 监听工具条按钮点击事件
    table.on('tool(departmentList)', function (obj) {
        // 获得当前行lay-event对应的值
        var itemEvent = obj.event;
        eventHandle[itemEvent] ? eventHandle[itemEvent].call(this, obj) : '';
    });

    // 可编辑单元格改变事件
    table.on('edit(departmentList)', function (obj) {
        $url = '/departments/update/cell';
        $data = {
            code: obj.data.code,
            attrs: [obj.field],
            values: [obj.value]
        };
        yjsloading.ajaxAutoSubmit($url, $data,function (result) {

        });
    });

    //监听table的排序
    table.on('sort(departmentList)', function (obj) {
        var words = $('#searchReload').val();
        table.reload('departmentList', {
            initSort: obj //记录初始排序，如果不设的话，将无法标记表头的排序状态。 layui 2.1.1 新增参数
            ,where: { //请求参数
                field: obj.field //排序字段
                ,order: obj.type //排序方式
                ,keywords: words
            }
        });
    });
});